package com.meatball.dji.common.mqtt.handler.device.data.dto

import com.alibaba.fastjson.annotation.JSONField
import com.meatball.dji.common.mqtt.handler.device.enums.*

/**
 * TODO 定频数据:设备将以 0.5HZ 的频率定时上报
 *
 * @see com.meatball.dji.common.mqtt.data.model.ConfigModel
 *
 * @author 张翔宇
 * @since 2024年5月9日
 */
data class OsdParams(
    val tid: String,
    val bid: String,
    val timestamp: Long = System.currentTimeMillis(),
    val gateway: String,
    val method: String,
    val data: Data
) {
    /**
     * TODO
     *
     * @property silentMode {"0":"非静音模式","1":"静音模式"}
     *      开启静音模式，意味着：
     *      1. 风扇转速降低、空调制冷性能下降、炎热天气下作业间隔变长。
     *      2. 蜂鸣器声音将关闭，开关舱盖时请注意周围安全。
     *      3. 机场待机状态的白色指示灯关闭，其他运行状态的指示灯正常。
     * @property userExperienceImprovement {"0":"初始状态","1":"拒绝加入用户体验改善计划","2":"同意加入用户体验改善计划"}
     * @property dongleInfos 4G Dongle信息 array
     */
    data class Data(
        @field:JSONField(name = "silent_mode")
        val silentMode: SilentModeEnum,
        @field:JSONField(name = "user_experience_improvement")
        val userExperienceImprovement: UserExperienceImprovementEnum,
        @field:JSONField(name = "dongle_infos")
        val dongleInfos: DongleInfos
    ) {
        /**
         * TODO 4G Dongle信息
         *
         * @property imei Dongle 的唯一识别标志
         * @property dongleType Dongle 类型
         * @property eid eSIM 的唯一识别标志，用于公众号查询套餐、购买服务
         * @property eSimActivateState eSIM 激活状态，需要激活才能使用
         * @property simCardState SIM 卡状态，Dongle 中实体 SIM 卡的插入状态
         * @property simSlot SIM 卡槽使能状态，标识 Dongle 当前正在使用的 SIM 卡槽
         */
        data class DongleInfos(
            val imei: String,
            @field:JSONField(name = "dongle_type")
            val dongleType: DongleTypeEnum,
            val eid: String,
            @field:JSONField(name = "esim_activate_state")
            val eSimActivateState: EsimActivateStateEnum,
            @field:JSONField(name = "sim_card_state")
            val simCardState: SimCardStateEnum,
            @field:JSONField(name = "sim_slot")
            val simSlot: SimSlotEnum
        )
    }
}